/*
Date:20210605 23:30PM
key:搞个哨兵节点很重要，然后以当前和下一个作为循环，下一个分成是末尾和不是末尾两种情况
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) 
    {
        if(head==nullptr){return nullptr;}
        ListNode* new_head=new ListNode;
        new_head->next=head;
        ListNode* p=new_head;
        while(p!=nullptr)
        {
            while(p->next!=nullptr&&p->next->val==val)
            {
                if(p->next->next==nullptr)
                {
                    p->next=nullptr;
                    break;
                }
                else
                {
                    p->next=p->next->next;
                }
            }
            p=p->next;
        }
        return new_head->next;
    }
};